package exemple15.actions.admin;

import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import exemple15.beans.Client;
import exemple15.modeles.ModeleClientDAO;



/**
 * @author Ambroise Malric
 * @copyright 2012
 * @version 0.1
 */

@SuppressWarnings("serial")
public class ClientAction extends ActionSupport implements ServletRequestAware, Preparable
{
	// Attributs
	private HttpServletRequest request;
	// Objets
	private Client client;
	// id du client
	private int idClient;
	// Param�tres pour la pagination
	private int page=0;
	private int maxParPage=0;
	private String champTri=null;
	private String typeTri=null;
	private String recherche=null;
	private String typerecherche=null;
	

	public Object getModel() {
		return client;
	}
	
	public Client getClient() {
		return client;
	}
	
	public void setClient(Client client) {
		this.client = client;
	}

	public int getIdClient() {
		return idClient;
	}

	public void setIdClient(int idClient) {
		this.idClient = idClient;
	}


	public void setServletRequest(HttpServletRequest request)
	{
		 this.request=request;
	}

	
	
	// Pr�parer les donn�es pour les formulaires en modification
	public void prepare() throws Exception {
		// Initialisation du mod�le
		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
		
		if(idClient==0) {
			client=new Client();
		} else {		
			client=modeleClientDAO.getClient(idClient);
		}
	}
	
	

	 
	// Lister les clients
	public String lister()
	{
		// Variables
		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
		ArrayList<Client> listeClient=null;
		
		try 
		{
			// On r�cupert la page demand�e
			page=Integer.parseInt(request.getParameter("page").trim());
			// Si la page vaut 0 ou inf�rieur on prend la valeur 1
			page=Math.max(page, 1);
		}
		catch(Exception e) 
		{
			// Si dans la requete l'attribut page n'est pas un nombre, on initialise la page � 1
			page=1;
		}
		
		try 
		{
			// On r�cupert le maximum d'�l�ments a afficher
			maxParPage=Integer.parseInt(request.getParameter("maxParPage").trim());
			// Si la page vaut 0 ou inf�rieur on prend la valeur 1
			maxParPage=Math.max(maxParPage, 20);
		}
		catch(Exception e) 
		{
			// Si dans la requete le param�tre n'est pas un nombre, on initialise le maximum d'�l�ment � 20
			maxParPage=20;
		}
	
		// On r�cupert le reste des �l�ments de la requete
		recherche=(String)request.getParameter("recherche");
		typerecherche=(String)request.getParameter("typerecherche");
		champTri=(String)request.getParameter("champTri");
		typeTri=(String)request.getParameter("typeTri");
				
		// Si aucun tri n'est demand�, ou que le tri est incorrect, on r�alise un tri sur l'id de l'administrateur
		if(champTri==null || (!champTri.equals("nomclient") && !champTri.equals("prenomclient") && !champTri.equals("identifiantclient") && !champTri.equals("emailclient") && !champTri.equals("id_client")))
		{
			champTri = "id_client";
		}
		// Si aucun type de tri n'est demand�, ou que le type de tri est incorrect, on r�alise un tri croissant
		if(typeTri==null || (!typeTri.equals("ASC") && !typeTri.equals("DESC")))
		{
			typeTri="ASC";
		}
	
		// On r�cupert la liste des clients depuis le mod�le
		listeClient=(ArrayList<Client>)modeleClientDAO.listeClientPaginer(maxParPage, page, recherche,typerecherche, champTri, typeTri);
		
		// On renvoi � la JSP la liste des clients obtenu ainsi que les informations de pagination
		request.setAttribute("listeClient",listeClient);
		request.setAttribute("maxParPage", modeleClientDAO.getMaxParPage());
		request.setAttribute("pageActuel", modeleClientDAO.getPageActuel());
		request.setAttribute("totalElement", modeleClientDAO.getTotalElement());
		request.setAttribute("champTri", modeleClientDAO.getChampTri());
		request.setAttribute("typeTri", modeleClientDAO.getTypeTri());
		request.setAttribute("recherche", modeleClientDAO.getRecherche());
		request.setAttribute("typerecherche", modeleClientDAO.getTyperecherche());
		
		// On vide la liste des clients par s�curit�
		listeClient=null;
		
		// On renvoie la page de listing des clients
		return SUCCESS;
	}
	
	
	
	// Consulter un administrateur
	public String consulter()
	{
		// Variables
		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
		int idClient=0;
		Client client=null;
		
		try
		{
			// On r�cupert l'id du client
			idClient=Integer.parseInt(request.getParameter("idClient"));
		}
		catch (Exception e) 
		{
			// Si l'id du client pass� en param�tre n'est pas un nombre, on initialise l'id � 0
			idClient=0;
		}
		
		// On r�cupert le client correspondant, renvoi null si l'id du client n'existe pas dans la base
		client=(Client)modeleClientDAO.getClient(idClient);
		
		// Si l'objet client est null (id non trouv�) on renvoi sur la page de listing avec un message d'erreur
		if(client!=null)
		{
			// On renvoi � la JSP la cat�gorie demand�e
			request.setAttribute("client",client);
			
			// On vide ce client par s�curit�
			client=null;
		}
		else
		{
			// On renvoi � la page de liste des clients avec un message d'erreur
			addActionError(getText("erreur.clientexiste"));
			return "accueilAdmin";
		}
		
		return SUCCESS;
	}
	 
	
	
	
	// Afficher le formulaire d'�dition (ajout ou modification)
	public String editer()
	{
		return SUCCESS;
	}
	
	

	// Cr�er ou modifier le client
	public String ajoutermodifier()
	{
		// Variables
		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
		int codeErreur=0;
			
		// Cas de la cr�ation
		if(client.getIdClient()==0)
		{
			// On ajoute le client � la base de donn�e, renvoi 1 si l'ajout s'est d�roul� avec succ�s
			codeErreur=modeleClientDAO.ajouterClient(client);
					
			// On test le code de retour pour afficher un message de succes ou d'erreur
			if(codeErreur!=1)
			{		
				// Erreur lors de la cr�ation
				addActionError(getText("erreur.creationclient"));
				return INPUT;
			}
			else
			{	
				// Succ�s lors de la cr�ation
				addActionMessage(getText("succes.creationclient"));
				// retourner sur la page d'accueil du listing
				return "listerClient";
			}
		}
		// Cas de la modification
		else
		{
			// On modifie le client dans la base de donn�e, renvoi 1 si la modification s'est d�roul�e avec succ�s
			codeErreur=modeleClientDAO.modifierClient(client);
			
			// On teste le code de retour pour afficher un message de succ�s ou d'erreur
			if(codeErreur!=1)
			{		
				// Erreur lors de la modification
				addActionError(getText("erreur.modificationclient"));
				return INPUT;
			}
			else
			{	
				// Succ�s lors de la modification
				addActionMessage(getText("succes.modificationclient"));
				return "listerClient";
			}
		}

	}

	
	
	// Supprimer un client
	public String supprimer()
	{
		// Variables
		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
 		int idClient=0;
		int codeErreur=0;
	
		try
		{
			// On r�cupert l'id du client
			idClient=Integer.parseInt(request.getParameter("idClient"));
		}
		catch (Exception e) 
		{
			// Si l'id du client pass� en param�tre n'est pas un nombre, on initialise l'id � 0
			idClient=0;
		}
		
		// Si le client existe en base on peut la supprimer
		if(modeleClientDAO.getClient(idClient)!=null)
		{	
			// On envoie au mod�le l'id du client � supprimer, renvoi 1 si le client a bien �t� supprim�
			codeErreur=modeleClientDAO.supprimerClient(idClient);
				
			// On test le code de retour pour afficher un message de succes ou d'erreur
			if(codeErreur!=1)
			{		
				// On renvoie � la page d'accueil avec un message d'erreur
				addActionError(getText("erreur.suppressionclient"));
				return ERROR;
			}
			else
			{	
				// On renvoie � la page d'accueil
				addActionMessage(getText("succes.suppressionclient"));
				return "listerClient";
			}
		}
		else
		{
			// On renvoie � la page d'accueil
			addActionError(getText("erreur.clientexiste"));
			return ERROR;
		}
		
	}
	


	
	
}
